#ifndef _LOCALISATION_H
#define _LOCALISATION_H

struct TextLocalisationP1
{
	ui32 textid;
	struct TextLocale
	{
		string text[1];
		string localid;
	};
	vector<TextLocale*> localisations;
};

struct TextLocalisationP2
{
	ui32 textid;
	struct TextLocale
	{
		string text[2];
		string localid;
	};
	vector<TextLocale*> localisations;
};

class DLL_EXPORT DatabaseLocalisation : public Single<DatabaseLocalisation>
{
	stdext::hash_map<ui32, TextLocalisationP1*> GossipLocalMap;
	stdext::hash_map<ui32, TextLocalisationP2*> ItemLocalMap;
	stdext::hash_map<ui32, TextLocalisationP2*> NpcLocalMap;
	string* GetStringLocale1(stdext::hash_map<ui32, TextLocalisationP1*>& searchmap, ui32 id, string locale);
	string* GetStringLocale2(stdext::hash_map<ui32, TextLocalisationP2*>& searchmap, ui32 id, string locale, ui32 pos = 0);
	void LoadLocalizedTable1(stdext::hash_map<ui32, TextLocalisationP1*>& fillmap, const char* table);
	void LoadLocalizedTable2(stdext::hash_map<ui32, TextLocalisationP2*>& fillmap, const char* table);
public:
	void LoadGossipLocals();
	void LoadItemLocals();
	void LoadNpcLocals();
	string* GetGossipLocale(ui32 textid, string& locale);
	string* GetItemNameLocale(ui32 itemid, string& locale);
	string* GetItemDescriptionLocale(ui32 itemid, string& locale);
	string* GetNpcNameLocale(ui32 npcid, string& locale);
	string* GetNpcSubnameLocale(ui32 npcid, string& locale);
};

#define sDatabaseLocal (*DatabaseLocalisation::getSingle())

#endif